//! CDB - 高性能内存数据库
//! 
//! 基于Rust实现的现代化OLTP数据库，专注于高性能和内存优化
//! 
//! # 特性
//! - 高性能OLTP工作负载
//! - 内存优化存储引擎
//! - 标准SQL支持
//! - ACID事务
//! - PostgreSQL协议兼容
//! 
//! # 示例
//! ```rust
//! use cdb::{Database, Result};
//!
//! #[tokio::main]
//! async fn main() -> Result<()> {
//!     let db = Database::new().await?;
//!     let mut conn = db.connect().await?;
//!
//!     // 开始事务
//!     let _tx = conn.begin_transaction().await?;
//!
//!     // 提交事务
//!     conn.commit().await?;
//!
//!     // 关闭数据库
//!     db.close().await?;
//!
//!     Ok(())
//! }
//! ```

pub mod error;
pub mod sql;
pub mod storage;
pub mod network;
pub mod utils;
pub mod cluster;

// 重新导出核心类型
pub use error::{Error, Result};
pub use sql::{QueryEngine, QueryResult};
pub use storage::{Database, Connection, Transaction};

/// CDB数据库版本信息
pub const VERSION: &str = env!("CARGO_PKG_VERSION");

/// 默认配置
pub mod config {
    use serde::{Deserialize, Serialize};
    
    /// 数据库配置
    #[derive(Debug, Clone, Serialize, Deserialize)]
    pub struct DatabaseConfig {
        /// 内存限制 (字节)
        pub memory_limit: usize,
        /// 最大连接数
        pub max_connections: usize,
        /// 查询超时时间 (秒)
        pub query_timeout: u64,
        /// 页面大小 (字节)
        pub page_size: usize,
        /// 缓冲池大小 (字节)
        pub buffer_pool_size: usize,
        /// 是否启用持久化
        pub enable_persistence: bool,
        /// 数据目录
        pub data_directory: Option<std::path::PathBuf>,
    }
    
    impl Default for DatabaseConfig {
        fn default() -> Self {
            Self {
                memory_limit: 8 * 1024 * 1024 * 1024, // 8GB
                max_connections: 1000,
                query_timeout: 30,
                page_size: 8 * 1024, // 8KB
                buffer_pool_size: 1024 * 1024 * 1024, // 1GB
                enable_persistence: false,
                data_directory: None,
            }
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    
    #[test]
    fn test_version() {
        assert!(!VERSION.is_empty());
    }
    
    #[test]
    fn test_default_config() {
        let config = config::DatabaseConfig::default();
        assert_eq!(config.memory_limit, 8 * 1024 * 1024 * 1024);
        assert_eq!(config.max_connections, 1000);
        assert_eq!(config.query_timeout, 30);
    }
}
